home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / msdos / css / source / menu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-19  |  8.1 KB  |  260 lines

  1.  
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <string.h>
  5. #include <glib.h>
  6. #include "land.h"
  7.  
  8. /* #include "..\lib.h" */
  9.  
  10. int calchk( int mx, int my, int x, int y, int *mosx, int *mosy)
  11. { double wa;
  12.  
  13.   if (xychk16(mx, my, x, y) == 1) {
  14.      calcu(x, y, 1);
  15.      while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  16.      if (xychk16(mx, my, x, y) == 1) calc( mosx, mosy, &wa);
  17.      calcu(x, y, 0);
  18.      return(1);
  19.   }
  20.   return(0);
  21. }
  22.  
  23. void mbox(int x1, int y1, int x2, int y2)
  24. {
  25.      line(x1, y1, x2, y2, PSET, col7, 2, 0xffff);
  26.      line(x1, y1, x2, y2, PSET, col1, 1, 0xffff);
  27.      line(x2+1, y1+6, x2+6, y2+6, PSET, col0, 2, 0xffff);
  28.      line(x1+6, y2+1, x2, y2+6, PSET, col0, 2, 0xffff);
  29.      return;
  30. }
  31.  
  32. void menubox(int x1, int y1, int x2, int y2, char ttl[])
  33. {
  34.     mbox(x1, y1, x2, y2);
  35.     line(x1, y1, x2, y1+20, PSET, col1, 2, 0xffff);
  36.     symbol_(x1+2, y1+2, ttl, 1,1, col14, 0 ,PSET);
  37.     return;
  38. }
  39.  
  40. void menucls(int x1, int y1, int x2, int y2)
  41. {
  42.    line(x1+1, y1+21, x2-1, y2-1, PSET, col7, 2, 0xffff);
  43. }
  44.  
  45. void helpbox(int x1, int y1, int x2, int y2, char ttl[])
  46. {
  47.     mbox(x1, y1, x2, y2);
  48.     line(x1, y1, x2, y1+20, PSET, col1, 2, 0xffff);
  49.     symbol_(x1+2, y1+2, ttl, 1,1, col13, 0 ,PSET);
  50.     return;
  51. }
  52.  
  53. void helpbox2(int x1, int y1, int x2, int y2, char ttl[])
  54. {
  55.     line(x1, y1, x2, y2, PSET, col7, 2, 0xffff);
  56.     line(x1, y1, x2, y2, PSET, col1, 1, 0xffff);
  57.     line(x1, y1, x2, y1+20, PSET, col1, 2, 0xffff);
  58.     symbol_(x1+2, y1+2, ttl, 1,1, col13, 0 ,PSET);
  59.     return;
  60. }
  61.  
  62. void helpcls(int x1, int y1, int x2, int y2)
  63. {
  64.    line(x1+1, y1+21, x2-1, y2-1, PSET, col7, 2, 0xffff);
  65. }
  66.  
  67. /*  input area 0,0,114,139  */
  68. void  minpnb(int x0, int y0)
  69. {
  70. int bcl[16];
  71. int xx,yy;
  72.    bcl[0] = col1;
  73.  
  74.    /* 影枠   影塗色 */
  75.    /* hatch(5); */
  76.    line(x0+10, y0+10, x0+114, y0+139, PSET, col0, 2, 0xffff);
  77.  
  78.    /* キーボード */
  79.    line(x0+0,y0+0,x0+105,y0+130,   PSET, col7, 2, 0xffff);
  80.    line(x0+0,y0+0,x0+105,y0+130,   PSET, col1, 1, 0xffff);
  81.    line(x0+105,y0+0,x0+108,y0+3,   PSET, col1, 0, 0xffff);
  82.    line(x0+108,y0+3,x0+108,y0+133, PSET, col1, 0, 0xffff);
  83.  /*  line(x0+108,y0+133,x0+105,y0+130, PSET, col1, 0, 0xffff); */
  84.    line(x0+108,y0+133,x0+3,y0+133, PSET, col1, 0, 0xffff);
  85.    line(x0+3,y0+133,x0+0,y0+130,   PSET, col1, 0, 0xffff);
  86.  
  87.    /*  キーボード外枠塗色 */
  88.    drmode(PSET);
  89.    paint(x0+106,y0+10, 1, col1,  1, bcl);
  90.    paint(x0+10,y0+131, 1, col1,  1, bcl);
  91.    
  92.    /* データ表示窓 */
  93.    line(x0+5,y0+5,x0+100,y0+25, PSET, col1, 2, 0xffff);
  94.    line(x0+5,y0+5,x0+100,y0+25, PSET, col8, 1, 0xffff);
  95.    /* キー作成 */
  96.    xx=x0+5; yy=y0+30;
  97.    box(xx, yy);
  98.    symbol_(xx+2, yy+2, "7", 1,1, col15,0,PSET);
  99.    xx=x0+30; yy=y0+30;
  100.    box(xx, yy);
  101.    symbol_(xx+2, yy+2, "8", 1,1, col15,0,PSET);
  102.    xx=x0+55; yy=y0+30;
  103.    box(xx, yy);
  104.    symbol_(xx+2, yy+2, "9", 1,1, col15,0,PSET);
  105.    xx=x0+5;  yy=y0+55;
  106.    box(xx, yy);
  107.    symbol_(xx+2, yy+2, "4", 1,1, col15,0,PSET);
  108.    xx=x0+30; yy=y0+55;
  109.    box(xx, yy);
  110.    symbol_(xx+2, yy+2, "5", 1,1, col15,0,PSET);
  111.    xx=x0+55; yy=y0+55;
  112.    box(xx, yy);
  113.    symbol_(xx+2, yy+2, "6", 1,1, col15,0,PSET);
  114.    xx=x0+5;  yy=y0+80;
  115.    box(xx, yy);
  116.    symbol_(xx+2, yy+2, "1", 1,1, col15,0,PSET);
  117.    xx=x0+30; yy=y0+80;
  118.    box(xx, yy);
  119.    symbol_(xx+2, yy+2, "2", 1,1, col15,0,PSET);
  120.    xx=x0+55; yy=y0+80;
  121.    box(xx, yy);
  122.    symbol_(xx+2, yy+2, "3", 1,1, col15,0,PSET);
  123.    xx=x0+5;  yy=y0+105;
  124.    box(xx, yy);
  125.    symbol_(xx+2, yy+2, "0", 1,1, col15,0,PSET);
  126.    xx=x0+30; yy=y0+105;
  127.    box(xx, yy);
  128.    symbol_(xx+2+6, yy+2, ".", 1,1, col15,0,PSET);
  129.    xx=x0+80, yy=y0+30;
  130.    box(xx, yy);
  131.    symbol_(xx+2, yy+2, "←", 1,1, col15,0,PSET);
  132.    xx=x0+80, yy=y0+55;
  133.    box(xx, yy);
  134.    symbol_(xx+2, yy+2, "-", 1,1, col15,0,PSET);
  135.    xx=x0+55, yy=y0+105;
  136.    line(xx, yy, xx+45, yy, PSET, col15, 0, 0xffff);
  137.    line(xx, yy, xx, yy+20, PSET, col15, 0, 0xffff);
  138.    line(xx, yy+20, xx+45, yy+20, PSET, col8, 0, 0xffff);
  139.    line(xx+45, yy+20, xx+45, yy, PSET, col8, 0, 0xffff);
  140.    symbol_(xx+4,  yy+2, "実", 1,1, col15,0,PSET);
  141.    symbol_(xx+25, yy+2, "行", 1,1, col15,0,PSET);
  142.    return;
  143. }
  144.  
  145.  
  146. /* xy check 16dot   return( yes=1, n0=0)  */
  147. int xychk16(int x, int y, int x1, int y1)
  148. {
  149.     return(xychk(x, y, x1, y1, x1+15, y1+15));
  150. }
  151.  
  152. /* xy check 8dot   return( yes=1, no=0)  */
  153. int xychk8(int x, int y, int x1, int y1)
  154. {
  155.     return(xychk(x, y, x1, y1, x1+7, y1+7));
  156. }
  157.  
  158. void msgset2(int x, int y, char msg[], int col)
  159. {
  160.    symbol(x, y, msg, 1,1, col,0,PSET);
  161. }
  162.  
  163. void msgset(int x, int y, char msg[], int col)
  164. {
  165.    symbol_(x, y, msg, 1,1, col,0,PSET);
  166. }
  167.  
  168.  
  169. /* input num set and print */
  170. void numset(int x, int y, int nn, char nline[], int *ncnt, int *pf)
  171. {
  172.    if ((nn == '-' && *ncnt != 0) || (nn != 8 && *ncnt == 11) || ( nn == '.' && *pf != 0)) {
  173.       putchar('\7'); return; /* error */
  174.    }
  175.    if ( nn == 8 ) {
  176.       if (*ncnt == 0) putchar('\7'); /* error */
  177.       else {
  178.          (*ncnt)--;
  179.          symbol(x+8+8*(*ncnt),y+8,nline+(*ncnt), 1, 2, col1, 0, PSET);
  180.          if (nline[*ncnt] == '.') *pf = 0; /* flag clear */
  181.          nline[*ncnt] = '\0';
  182.       }
  183.       return;
  184.    }
  185.    if (nn == '.') *pf = 1; /* flag set */
  186.    nline[*ncnt] = nn;
  187.    symbol(x+8+8*(*ncnt),y+8,nline+(*ncnt), 1, 2, col14, 0, PSET);
  188.    (*ncnt)++;
  189.    return;
  190. }
  191.  
  192. /* mouse input */
  193. double minpn(int x, int y, double pnum)
  194. {
  195.     int ncnt = 0, pf = 0, mx, my, nn, xw, yw;
  196.     char nline[12], i;
  197.     unsigned  ddadr[2];
  198.     unsigned char page;
  199.     char      buf[8052];
  200.     
  201.     MOS_disp(1); /* mouse disp off */
  202.         
  203.     BSETDATAADR(ddadr, buf);
  204.     page = 0;
  205.     GDS_getBlock(ddadr[0], ddadr[1], page, x, y, x+114, y+139);
  206.     
  207.     for (i=0; i <12; i++) nline[i]=0;
  208.     minpnb(x,y);
  209.     MOS_horizon(x, x+105);
  210.     MOS_vertical(y, y+130);
  211.     MOS_disp(0); /* mouse disp on */
  212.     
  213.     while (1) {
  214.        nn = 0;
  215.        while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  216.        for (i=1; i==1; i++) {
  217.           if (xychk(mx, my, xw=x+5, yw=y+30, x+25,  y+50) == 1)  { nn = '7'; break; }
  218.           if (xychk(mx, my, xw=x+30, yw=y+30, x+50, y+50) == 1)  { nn = '8'; break; }
  219.           if (xychk(mx, my, xw=x+55, yw=y+30, x+75, y+50) == 1)  { nn = '9'; break; }
  220.           if (xychk(mx, my, xw=x+5,  yw=y+55, x+25, y+75) == 1)  { nn = '4'; break; }
  221.           if (xychk(mx, my, xw=x+30, yw=y+55, x+50, y+75) == 1)  { nn = '5'; break; }
  222.           if (xychk(mx, my, xw=x+55, yw=y+55, x+75, y+75) == 1)  { nn = '6'; break; }
  223.           if (xychk(mx, my, xw=x+5,  yw=y+80, x+25,y+100) == 1)  { nn = '1'; break; }
  224.           if (xychk(mx, my, xw=x+30, yw=y+80, x+50,y+100) == 1)  { nn = '2'; break; }
  225.           if (xychk(mx, my, xw=x+55, yw=y+80, x+75,y+100) == 1)  { nn = '3'; break; }
  226.           if (xychk(mx, my, xw=x+5,  yw=y+105,x+25,y+125) == 1)  { nn = '0'; break; }
  227.           if (xychk(mx, my, xw=x+30, yw=y+105,x+50,y+125) == 1)  { nn = '.'; break; }
  228.           if (xychk(mx, my, xw=x+80, yw=y+30, x+100,y+50) == 1)  { nn =  8;  break; } /* back spase */
  229.           if (xychk(mx, my, xw=x+80, yw=y+55, x+100,y+75) == 1)  { nn = '-'; break; }
  230.           xw = 0; yw = 0;
  231.        }
  232.        if (xychk(mx, my, x+55, y+105,x+100,y+125) == 1) {
  233.           xw=x+55, yw=y+105;
  234.           line(xw, yw, xw+45, yw, PSET, col8, 0, 0xffff);
  235.           line(xw, yw, xw, yw+20, PSET, col8, 0, 0xffff);
  236.           line(xw, yw+20, xw+45, yw+20, PSET, col15, 0, 0xffff);
  237.           line(xw+45, yw+20, xw+45, yw, PSET, col15, 0, 0xffff);
  238.           MOS_horizon(0,  639);
  239.           MOS_vertical(0, 399);
  240.           GDS_putBlock(ddadr[0], ddadr[1], page, x, y, x+114, y+139, PSET);
  241.           if (nline[0] == '\0') return(pnum);
  242.           return(atof(nline));
  243.         /*  
  244.           line(xw, yw, xw+45, yw, PSET, col15, 0, 0xffff);
  245.           line(xw, yw, xw, yw+20, PSET, col15, 0, 0xffff);
  246.           line(xw, yw+20, xw+45, yw+20, PSET, col8, 0, 0xffff);
  247.           line(xw+45, yw+20, xw+45, yw, PSET, col8, 0, 0xffff);
  248.         */
  249.        } else {
  250.           if (xw != 0) box2(xw, yw);
  251.           if (nn != 0) numset(x, y, nn, nline, &ncnt, &pf);
  252.           else putchar('\7');
  253.           while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  254.           if (xw != 0) box(xw, yw);
  255.        }
  256.     }
  257. }
  258.  
  259. /* end of file */
  260.